import hashlib
import base64
import json
import datetime


def generate_license(key, expiration_date):
    data = {
        'key': key,
        'expiration_date': expiration_date.isoformat(),
    }

    # 将数据转换为JSON并进行编码
    json_data = json.dumps(data).encode('utf-8')

    # 对JSON数据进行哈希处理
    hashed_data = hashlib.sha256(json_data).digest()

    # 使用base64对哈希数据进行编码
    encoded_data = base64.b64encode(hashed_data).decode('utf-8')

    return encoded_data


def validate_license(license, key):
    # 解码base64编码的许可证
    decoded_data = base64.b64decode(license.encode('utf-8'))

    # 对JSON数据进行哈希处理
    hashed_data = hashlib.sha256(decoded_data).digest()

    # 将哈希数据转换为JSON
    data = json.loads(hashed_data.decode('utf-8'))

    # 提取密钥和过期日期
    stored_key = data.get('key')
    expiration_date_str = data.get('expiration_date')

    # 验证密钥
    if stored_key != key:
        return False, "无效的许可证密钥"

    # 验证过期日期
    expiration_date = datetime.datetime.strptime(expiration_date_str, '%Y-%m-%dT%H:%M:%S.%f')
    if expiration_date < datetime.datetime.now():
        return False, "许可证已过期"

    return True, "许可证有效"


# 示例用法
license_key = "235681"
expiration_date = datetime.date(2024, 12, 31)

# 生成许可证
license = generate_license(license_key, expiration_date)
print(f"生成的许可证: {license}")

# 用户输入许可证
user_provided_license = input("输入许可证: ")

# 验证许可证
is_valid, message = validate_license(user_provided_license, license_key)

if is_valid:
    print("许可证有效!")
else:
    print(f"许可证验证失败: {message}")
